---
title: 设计范式
description: 范式是数据库表设计的基本原则
---
## 数据库的设计范式都包括那些
在设计关系型数据库模型的时候，需要对关系内部各个属性之间联系的合理化程度进行定义，这就有了不同等级的规范要求，这些规范要求被称为范式（NF）。

可以把范式理解为，一张数据表的设计结构需要满足的某种设计标准的级别。

目前关系型数据库一共有 6 种范式，按照范式级别，从低到高分别是： 1NF、2NF、3NF、BCNF(巴斯-刻的范式)、4NF 和 5NF（又叫做完美范式）

数据库的范式设计越高阶，冗余度就越低，同时高阶的范式一定符合低阶范式的要求，比如满足 2NF 的一定满足 1NF，满足 3NF 的一定满足 2NF ，依次类推。

一般来说数据表的设计应尽量满足 3NF。但是也不绝对，有时候为了提高某些查询性能，我们还需要破环范式规则，也就是反规范式化。

![4299e5030169710d5b1d29fd0729879b](https://img.wkq.pub/spring/4299e5030169710d5b1d29fd0729879b.webp)

1NF 指的是数据库表中的任何属性都是原子性的，不可再分。字段属性是原子性的。

2NF 指的是数据表里的非主属性都和这个表的候选键有完全依赖关系。一张表就是一个独立的对象。

3NF 在满足 2NF 的同时，对任何非主属性都不传递依赖于候选键

## 反范式化设计

越高阶的范式得到的数据表越多，数据冗余度越低。但有时候，我们在设计数据表的时候，还需要为了性能和读取效率违反设计原则。反范式就是相对范式化而言的，换句话说，就是允许少量的冗余，通过空间来换时间。

如果我们想要对查询效率进行优化，有时候反范式优化也是一种思路。

